package com.wdciti.sccp.iot.springvertx.protocols.tcp.ext;

import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.HashMap;
import java.util.Map;

/**
 * 这个类用来管理注册的ByteToMessageDecoder，用于格式化字节流，和解决tcp黏包半包问题。
 * 由于这种Decoder深度绑定特定报文，默认值没有意义，使用前需要主动调用put(id,instance)载入实现类，
 * 然后方可在配置文件中使用载入的ID做配置切换，缺失任一项则不启用decoder。
 *
 * @author early
 */
public class B2mDecoderFactory {

    private static final Map<String, ByteToMessageDecoder> DECODER_MAP = new HashMap<>();
    private static final Map<String, String> VERTICLE_CODEC_MAP = new HashMap<>();

    public static void put(String name, ByteToMessageDecoder decoder) {
        DECODER_MAP.put(name, decoder);
    }

    public static ByteToMessageDecoder get(String decoderName) {
        return DECODER_MAP.get(decoderName);
    }

    public static ByteToMessageDecoder searchCodecRef(String id) {
        String name = VERTICLE_CODEC_MAP.get(id);
        if (name != null) {
            return DECODER_MAP.get(name);
        } else {
            return null;
        }
    }

    public static void setVerticleCodecRef(String id, String decoderName) {
        VERTICLE_CODEC_MAP.put(id, decoderName);
    }
}
